/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.ohyessoftware.sigc.infra.persistencia;

import br.com.caelum.vraptor.ioc.Component;
import br.com.ohyessoftware.sigc.infra.negocio.Fornecedor;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author Diego
 * 02/06/2011
 */
@Component
public class ColFornecedor{
    /**
     * Sessão do hibernate que comunica camada de persistencia com a de negócio.
     */
    private final Session session;

    public ColFornecedor(Session session) {
        this.session = session;
    }

    /**
     * Persiste um objeto no banco.
     * @param Objeto a ser persistido.
     */
    public void salva(Fornecedor fornecedor) throws Exception {
        valida(fornecedor);
        //se fornecedor foi validado
        Transaction tx = session.beginTransaction();
        session.save(fornecedor);
        tx.commit();
    }

    /**
     * Deleta um objeto do banco.
     * @param Objeto a ser deletado.
     */
    public void deleta(Fornecedor fornecedor) {
        Transaction tx = session.beginTransaction();
        session.delete(fornecedor);
        tx.commit();
    }

    public void altera(Fornecedor fornecedor) throws Exception {
        valida(fornecedor);
        Transaction tx = session.beginTransaction();
        session.update(fornecedor);
        tx.commit();
    }

    public Fornecedor buscaPK(Long id) {
        return (Fornecedor) session.load(Fornecedor.class, id);
    }

    public List<Fornecedor> buscaTodos() {
        return session.createCriteria(Fornecedor.class).list();
    }

    private void valida(Fornecedor fornecedor) throws Exception {
        if (fornecedor.getNome() == null) {
            throw new Exception("Nome do fornecedor deve existir!");
        }
        if (fornecedor.getNome().equals("")) {
            throw new Exception("Nome do fornecedor deve existir!");
        }
    }
}
